1.flash 的介绍

  • flash 是一个基于session实现的用于保存数据的集合,其特点是:使用一次就删除

2.flash 的原理

  • 在session中储存一个数据,在读取完数据后通过pop将该数据移除

# app.py

from flask import Flask, render_template, session

app = Flask(__name__)
app.secret_key = 'session_salt'


@app.route('/login')
def login():
    session['username'] = 'Kevin'  # 设置 session
    return render_template('login.html')


@app.route('/index')
def index():
    username = session.get('username')  # 获取 session
    print(username)  # Kevin
    session.pop('username')  # 删除获取过数据的session
    print(session.get('username'))  # None
    return render_template('index.html')


if __name__ == '__main__':
    app.run()

3.flash 的使用

  • 基本使用

# app.py

from flask import Flask, render_template, flash, get_flashed_messages

app = Flask(__name__)
app.secret_key = 'session_salt'  # 一定要设置 secret_key,因为 flash 是使用 session 做数据存储的


@app.route('/login')
def login():
flash('临时数据')  # 设置 flash
    return render_template('login.html')


@app.route('/index')
def index():
    flash_data = get_flashed_messages() # 获取 flash
    print(flash_data)  # ['临时数据'] -> 如果再一次访问 /index 那么结果就是 []
    return render_template('index.html')


if __name__ == '__main__':
    app.run()

  • 分类使用

    • category 设置数据的分类

      • 默认值: message (即: flash 的数据默认分类为 message)

# app.py

from flask import Flask, render_template, flash, get_flashed_messages

app = Flask(__name__)
app.secret_key = 'session_salt'  # 一定要设置 secret_key,因为 flash 是使用 session 做数据存储的


@app.route('/login')
def login():
    flash('错误数据1', category='error')  # 设置 flash -> 将该数据的分类设置为 error
    flash('错误数据2', category='error')  # 设置 flash -> 将该数据的分类设置为 error
    flash('info数据', category='info')  # 设置 flash -> 将该数据的分类设置为 info
    flash('临时数据')  # 设置 flash(即: 默认将该数据的分类设置为 message)
    return render_template('login.html')


@app.route('/index')
def index():
# -----------------------------------------------

    flash_error_info_data = get_flashed_messages(category_filter=['error', 'info'])  # 获取分类为 error、info 的 flash 数据
    print(flash_error_info_data)  # ['错误数据1', '错误数据2', 'info数据'] -> 如果再一次访问 /index 那么结果就是 []

# -----------------------------------------------

    flash_error_info_data = get_flashed_messages(category_filter=['message'])  # 获取分类为 message 的 flash 数据(即: flash默认分类数据)
    print(flash_error_info_data)  # ['临时数据'] -> 如果再一次访问 /index 那么结果就是 []

# -----------------------------------------------

    flash_data = get_flashed_messages()  # 获取所有分类的 flash 的数据
    print(flash_data)  # ['错误数据1', '错误数据2', 'info数据', '临时数据'] -> 如果再一次访问 /index 那么结果就是 []

# -----------------------------------------------

    return render_template('index.html')


if __name__ == '__main__':
    app.run()